1
La concurrence sur la planète rouge
AI017Lesson 8
00:00

La concurrence sur la planète rouge est l'art de gérer plusieurs opérations indépendantes — telles que la navigation des rovers, la télémetrie des signaux vitaux et les liaisons satellites — sans bloquer le système. En Go, une tâche exécutée de manière indépendante est appelée goroutine.

1. Le principe de non-déterminisme

Il est préférable de toujours supposer que les opérations dans différentes goroutines peuvent s'exécuter dans n'importe quel ordre. Comme le runtime Go planifie les tâches sur les cœurs disponibles, nous ne pouvons pas compter sur un rover terminant son analyse avant qu'un autre ne commence sa transmission sans synchronisation explicite.

go printGopher(c) // Lance une nouvelle tâche indépendante

2. Mécanismes de synchronisation

Pour gérer ces tâches, Go fournit deux outils principaux :

  • Exclusion mutuelle : Les goroutines peuvent utiliser un mutex pour s'exclure mutuellement de faire quelque chose en même temps.
  • L'instruction select : Cela ressemble à un bloc switch où chaque cas contient une réception ou une transmission sur un canal. select attend jusqu'à ce qu'un cas soit prêt, puis l'exécute.
Gestionnaire Gopher(Casque de sécurité et bloc-notes)SELECTRover AlphaRover Beta

3. L'ébauche du worker

Les workers à longue durée utilisent généralement une boucle infinie combinée à select pour surveiller simultanément plusieurs canaux de communication :

func worker() {
for {
select {
// Attendre les canaux ici.
}
}
}
main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>